<?php

require_once("/var/www/AppResiduos2/config/BaseDatosPDO.php");
require_once("/var/www/AppResiduos2/lib/model/ConstituyenteResiduo.php");
require_once("/var/www/AppResiduos2/lib/dao/ConstituyenteDAO.php");

class ConstituyenteResiduoDAO{

        var $conexion;

        public function  __construct() {
            try{
                $bd = new BaseDatosPDO("localhost", "phplogin", "root", "root");
                $this->conexion = $bd->conectar();
            } catch (PDOException $e){
                echo $e->getMessage();
            }
            $this->conexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
            $this->conexion->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER);
        }

        /**
         * Crea un nuevo registro en la tabla components_residues de la bd
         * @param ConstituyenteResiduo $cr
         */
        public function nuevoConstResiduo($cr){
            $query = $this->conexion->prepare("INSERT INTO components_residues VALUES (?,?,?,?)");
            $params = array($cr->idComp, $cr->idResidue, $cr->idproducer, $cr->quantityComp);
            $result = $query->execute($params);
        }

        /**
         * Modifica un registro de la tabla components_residues de la bd
         * @param ConstituyenteResiduo $cr
         */
        public function modificarConstResiduo($cr){
            $query = $this->conexion->prepare('UPDATE components_residues SET
                quantityComp = ? WHERE idComp = ? and idResidue = ? and idproducer = ?');
            $params = array($cr->quantityComp, $cr->idComp, $cr->idResidue, $cr->idproducer);
            $result = $query->execute($params);
        }

        /**
         * Elimina un registro de la tabla components_residues de la bd
         * @param ConstituyenteResiduo $cr
         */
        public function eliminarConstResiduo($cr){
            $query = $this->conexion->prepare('DELETE FROM components_residues
                WHERE idComp = ? and idResidue = ? and idproducer = ?');
            $result = $query->execute(array($cr->idComp, $cr->idResidue, $cr->idproducer));
        }

        /**
         * Retorna un registro de la tabla components_residues con
         * el fin de conocer la cantidad de constituyente quimico
         * identificado con idComp que contiene el residuo identificado
         * con idResidue del productor idproducer
         * @param int $idComp
         * @param int $idResidue
         * @return ConstituyenteResiduo
         */
        public function obtenerConstYResiduo($idComp, $idResidue, $idproducer){
            $query = $this->conexion->prepare('SELECT * FROM components_residues
                WHERE idComp = ? and idResidue = ? and idproducer = ?');
            $query->execute(array($idComp, $idResidue, $idproducer));
            $result = $query->fetchAll(PDO::FETCH_OBJ);
            return $result;
        }

        /**
         * Retorna los nombres de los componentes quimicos de un residuo (los registros de la
         * tabla components correspondientes a los componentes del residuo
         * idResidue del productor idproducer. (Necesario para listar los
         * constituyentes en ListarResiduos.php)
         * @param String $idResidue
         * @return Array de Constituyente
         */
        public function obtenerNombreConstResiduo($idResidue, $idproducer){
            $query = $this->conexion->prepare('SELECT idComp FROM components_residues
                WHERE idResidue = ? and idproducer = ?');
            $query->execute(array($idResidue, $idproducer));
            $result = $query->fetchAll(PDO::FETCH_OBJ);

            $cDAO = new ConstituyenteDAO();
            $i = 0;
            $resultArray = array();
            while ($i < sizeof($result)){
                $resultArray[$i] = $cDAO->obtenerConstituyente($result[$i]->idcomp)->name;
                $i = $i + 1;
            }
            return $resultArray;
        }

           /**
         * Retorna los componentes quimicos de un residuo (los registros de la
         * tabla components correspondientes a los componentes del residuo
         * idResidue del productor idproducer. (Necesario para listar los
         * constituyentes en ListarConstituyentes.php)
         * @param String $idResidue
         * @param int $idproducer
         * @return Array de Constituyente
         */
        public function obtenerConstResiduo($idResidue, $idproducer){
            $query = $this->conexion->prepare('SELECT * FROM components_residues
                WHERE idResidue = ? and idproducer = ?');
            $query->execute(array($idResidue, $idproducer));
            $result = $query->fetchAll(PDO::FETCH_OBJ);

            $cDAO = new ConstituyenteDAO();
            $i = 0;
            $resultArray = array();
            while ($i < sizeof($result)){
                $resultArray[$i] = $cDAO->obtenerConstituyente($result[$i]->idcomp);
                $i = $i + 1;
            }
            return $resultArray;
        }

        /**
         * Determina si se debe eliminar o no el registro con el identificador
         * idcomp de la tabla components. Si no hay un registro en components_
         * residues con dicho identificador debe eliminarse; en caso contrario
         * no debe eliminarse.
         * @param String $idcomp
         * @return Boolean
         */
        public function eliminarConstDef($idcomp){
            $query = $this->conexion->prepare('SELECT * FROM components_residues
                WHERE idComp = ?');
            $query->execute(array($idcomp));
            $result = $query->fetchAll(PDO::FETCH_OBJ);
            $numReg = sizeof($result);
            if ($numReg == 0){
                return true;
            }
            else{
                return false;
            }
        }

   


}


//Prueba1: Nuevo registro en tabla components_residues
//$cr = new ConstituyenteResiduo();
//$cr->idComp = "C1";
//$cr->idResidue = "R1";
//$cr->idproducer = 5;
//$cr->quantityComp = 23.8;
//$cr2 = new ConstituyenteResiduo();
//$cr2->idComp = "C2";
//$cr2->idResidue = "R1";
//$cr2->idproducer = 6;
//$cr2->quantityComp = 32.1;
//$crDAO = new ConstituyenteResiduoDAO();
//$crDAO->nuevoConstResiduo($cr);
//$crDAO->nuevoConstResiduo($cr2);

//Prueba2: Modificar registro en tabla components_residues
//$cr = new ConstituyenteResiduo();
//$cr->idComp = "C1";
//$cr->idResidue = "R1";
//$cr->idproducer = 5;
//$cr->quantityComp = 23.7;
//$cr2 = new ConstituyenteResiduo();
//$cr2->idComp = "C2";
//$cr2->idResidue = "R1";
//$cr2->idproducer = 6;
//$cr2->quantityComp = 32.0;
//$crDAO = new ConstituyenteResiduoDAO();
//$crDAO->modificarConstResiduo($cr);
//$crDAO->modificarConstResiduo($cr2);

//Prueba3: Eliminar registro en tabla components_residues
//$cr = new ConstituyenteResiduo();
//$cr->idComp = "C1";
//$cr->idResidue = "R1";
//$cr->idproducer = 5;
//$cr2 = new ConstituyenteResiduo();
//$cr2->idComp = "C2";
//$cr2->idResidue = "R1";
//$cr2->idproducer = 6;
//$crDAO = new ConstituyenteResiduoDAO();
//$crDAO->eliminarConstResiduo($cr);
//$crDAO->eliminarConstResiduo($cr2);

//Prueba4: Obtener registro en tabla components_residues
//$crDAO = new ConstituyenteResiduoDAO();
////print_r($crDAO->obtenerConstYResiduo("C1", "R1", 5));
//print_r($crDAO->obtenerConstResiduo("R2", 6));

?>
